/*
 * Copyright (c) 2022 FuZhou Lockzhiner Electronic Co., Ltd. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <math.h>
#include "los_task.h"
#include "ohos_init.h"
#include "lz_hardware.h"
#include "file1.h"


// 定义六个GPIO口用于电机控制
#define GPIO_MOTOR1     GPIO0_PB7     // 电机1控制口
#define GPIO_MOTOR2     GPIO0_PB6     // 电机2控制口
#define GPIO_MOTOR3     GPIO0_PB2     // 电机3控制口
#define GPIO_MOTOR4     GPIO0_PB3     // 电机4控制口
#define GPIO_MOTOR5     GPIO0_PB1     // 电机5控制口
#define GPIO_MOTOR6     GPIO0_PB0     // 电机6控制口
#define GPIO_MOTOR7     GPIO0_PA4     // 电机7控制口


/***************************************************************
 * 函数名称: gpio_init
 * 说明: 初始化GPIO口用于电机控制
 ***************************************************************/
void gpio_init()
{
    // 初始化电机控制GPIO口
    LzGpioInit(GPIO_MOTOR1);
    LzGpioInit(GPIO_MOTOR2);
    LzGpioInit(GPIO_MOTOR3);
    LzGpioInit(GPIO_MOTOR4);
    LzGpioInit(GPIO_MOTOR5);
    LzGpioInit(GPIO_MOTOR6); 
    LzGpioInit(GPIO_MOTOR7); 


    // 设置GPIO口为输出模式
    LzGpioSetDir(GPIO_MOTOR1, LZGPIO_DIR_OUT);
    LzGpioSetDir(GPIO_MOTOR2, LZGPIO_DIR_OUT);
    LzGpioSetDir(GPIO_MOTOR3, LZGPIO_DIR_OUT);
    LzGpioSetDir(GPIO_MOTOR4, LZGPIO_DIR_OUT);
    LzGpioSetDir(GPIO_MOTOR5, LZGPIO_DIR_OUT);
    LzGpioSetDir(GPIO_MOTOR6, LZGPIO_DIR_OUT); 
    LzGpioSetDir(GPIO_MOTOR7, LZGPIO_DIR_OUT); 


    // GPIO口引脚复用配置
    PinctrlSet(GPIO_MOTOR1, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0);
    PinctrlSet(GPIO_MOTOR2, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0);
    PinctrlSet(GPIO_MOTOR3, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0);
    PinctrlSet(GPIO_MOTOR4, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0);
    PinctrlSet(GPIO_MOTOR5, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0);
    PinctrlSet(GPIO_MOTOR6, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0); 
    PinctrlSet(GPIO_MOTOR7, MUX_FUNC0, PULL_KEEP, DRIVE_LEVEL0); 


    // 初始化电机状态为关闭
    LzGpioSetVal(GPIO_MOTOR1, LZGPIO_LEVEL_LOW);
    LzGpioSetVal(GPIO_MOTOR2, LZGPIO_LEVEL_LOW);
    LzGpioSetVal(GPIO_MOTOR3, LZGPIO_LEVEL_LOW);
    LzGpioSetVal(GPIO_MOTOR4, LZGPIO_LEVEL_LOW);
    LzGpioSetVal(GPIO_MOTOR5, LZGPIO_LEVEL_LOW);
    LzGpioSetVal(GPIO_MOTOR6, LZGPIO_LEVEL_LOW); 
    LzGpioSetVal(GPIO_MOTOR7, LZGPIO_LEVEL_LOW); 

}

/***************************************************************
 * 函数名称: motor_1
 * 说明: 控制电机1（加温）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_1(SWITCH_STATUS_ENUM status)
{
    if(status == ON)
    {
        // 设置GPIO输出高电平以打开电机1
        LzGpioSetVal(GPIO_MOTOR1, LZGPIO_LEVEL_HIGH);
    }
    else if(status == OFF)
    {
        // 设置GPIO输出低电平以关闭电机1
        LzGpioSetVal(GPIO_MOTOR1, LZGPIO_LEVEL_LOW);
    }
}

/***************************************************************
 * 函数名称: motor_2
 * 说明: 控制电机2（散热）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_2(SWITCH_STATUS_ENUM status)
{
    if(status == ON)
    {
        // 设置GPIO输出高电平以打开电机2
        LzGpioSetVal(GPIO_MOTOR2, LZGPIO_LEVEL_HIGH);
    }
    else if(status == OFF)
    {
        // 设置GPIO输出低电平以关闭电机2
        LzGpioSetVal(GPIO_MOTOR2, LZGPIO_LEVEL_LOW);
    }
}

/***************************************************************
 * 函数名称: motor_3
 * 说明: 控制电机3（加湿）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_3(SWITCH_STATUS_ENUM status)
{
    if(status == ON)
    {
        // 设置GPIO输出高电平以打开电机3
        LzGpioSetVal(GPIO_MOTOR3, LZGPIO_LEVEL_HIGH);
    }
    else if(status == OFF)
    {
        // 设置GPIO输出低电平以关闭电机3
        LzGpioSetVal(GPIO_MOTOR3, LZGPIO_LEVEL_LOW);
    }
}

/***************************************************************
 * 函数名称: motor_4
 * 说明: 控制电机4（补光）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_4(SWITCH_STATUS_ENUM status)
{
    if(status == ON)
    {
        // 设置GPIO输出高电平以打开电机4
        LzGpioSetVal(GPIO_MOTOR4, LZGPIO_LEVEL_HIGH);
    }
    else if(status == OFF)
    {
        // 设置GPIO输出低电平以关闭电机4
        LzGpioSetVal(GPIO_MOTOR4, LZGPIO_LEVEL_LOW);
    }
}

/***************************************************************
 * 函数名称: motor_5
 * 说明: 控制电机5（浇水）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_5(SWITCH_STATUS_ENUM status)
{
    if(status == ON)
    {
        // 设置GPIO输出高电平以打开电机5
        LzGpioSetVal(GPIO_MOTOR5, LZGPIO_LEVEL_HIGH);
    }
    else if(status == OFF)
    {
        // 设置GPIO输出低电平以关闭电机5
        LzGpioSetVal(GPIO_MOTOR5, LZGPIO_LEVEL_LOW);
    }
}

/***************************************************************
 * 函数名称: motor_6
 * 说明: 控制电机6（排气）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_6(SWITCH_STATUS_ENUM status)
{
    if (status == ON)
    {
        LzGpioSetVal(GPIO_MOTOR6, LZGPIO_LEVEL_HIGH);
    }
    else if (status == OFF)
    {
        LzGpioSetVal(GPIO_MOTOR6, LZGPIO_LEVEL_LOW);
    }
}

/***************************************************************
 * 函数名称: motor_7
 * 说明: 控制电机7（蜂鸣器）
 * 参数: status - 控制状态（ON或OFF）
 ***************************************************************/
void motor_7(SWITCH_STATUS_ENUM status)
{
    if (status == ON)
    {
        LzGpioSetVal(GPIO_MOTOR7, LZGPIO_LEVEL_HIGH);
    }
    else if (status == OFF)
    {
        LzGpioSetVal(GPIO_MOTOR7, LZGPIO_LEVEL_LOW);
    }
}


